package com.mobile.service.inter.system;

import com.mobile.service.dto.AuthDTO;
import com.mobile.service.dto.UserDTO;
import com.mobile.service.dto.UserQueryDTO;
import com.mobile.util.Page;
import com.mobile.util.PageData;
import com.mobile.util.PageResult;
import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Map;

/**
 * 用户信息管理Service接口
 *
 * @author Administrator
 * @version 0.1 2021-01-15 初版
 */
public interface UserService {



    /**
     * 根据账号获取用户信息
     *
     * @param userCode 用户账号
     */
    public PageData getUserByCode(String userCode) throws Exception;

    /**
     * 根据手机号获取用户信息
     *
     * @param phone 用户账号
     */
    public PageData getUserByPhone(String phone) throws Exception;



    /**
     * 根据手机号修改用户密码
     *
     * @return
     */
    public int updatePassword(PageData pd) throws Exception;

    /**
     * 根据用户名修改登录时间
     *
     * @return
     */
    public int updateUser(PageData pd) throws Exception;



    /**
     * 用户列表查询（分页）
     *
     * @param userQueryDTO
     * @return
     * @throws Exception
     */
    PageResult<UserDTO> getUserListPage(UserQueryDTO userQueryDTO, PageData user) throws Exception;

    /**
     * 查询出该角色分配的菜单权限
     *
     * @param roleId
     * @return
     * @throws Exception
     */
    List<PageData> getMenuAuthByRole(Integer roleId) throws Exception;

    /**
     * 查询出该用户分配的菜单权限
     * @param userCode
     * @return
     * @throws Exception
     */
    List<PageData> getMenuAuthByUser(String userCode) throws Exception;



    /**
     * 新增用户
     *
     * @param pds
     * @return
     * @throws Exception
     */
    Map<String, Object> addUser(List<PageData> pds) throws Exception;

    /**
     * 删除用户
     *
     * @param pd
     * @throws Exception
     */
    void removeUser(PageData pd) throws Exception;

    /**
     * 根据用户账号获取用户信息和分配的权限
     *
     * @param userCode
     * @return
     * @throws Exception
     */
    Map<String, Object> getUserWithAuthByCode(String userCode) throws Exception;

    /**
     * 修改用户及分配的权限
     *
     * @param pd
     * @return
     */
    Map<String, Object> updateUserWithAuth(PageData pd, Jedis jedis) throws Exception;

    /**
     * 启用/禁用账户
     * @param pd
     */
    void lockedUser(PageData pd) throws Exception;

    /**
     * 获取登录用户信息
     * @param userCode
     * @return
     */
    PageData getLoginUserInfo(String userCode) throws Exception;
      /**
     * 修改用户信息
     * @param pd
     * @return
     */
    int updateUserInfo(PageData pd) throws Exception;

    /**
     * 查询该用户具有的权限(‘菜单ID-权限ID’格式)
     * @param userCode
     * @return
     * @throws Exception
     */
    List<String> getUserAuthByUserCode(String userCode) throws Exception;

    /**
     * 查询该角色具有的权限(‘菜单ID-权限ID’格式)
     * @param roleId
     * @return
     * @throws Exception
     */
    List<String> getRoleAuthByRoleId(Integer roleId) throws Exception;


}
